import Vue from 'vue';
import VueRouter from 'vue-router';
import Home from '@/pages/Home';
import Login from '@/pages/Login';
import Register from '@/pages/Register';
import Search from '@/pages/Search';

Vue.use(VueRouter);

// VueRouter是路由器对象的构造函数
// this.$router.push 调用的是路由器对象的方法,这个方法并不是路由器实例化对象的方法.而是这个对象原型的方法.
// 这个实例化对象原型的方法,就是VueRouter的限式原型的方法.
// 将原有的push方法保存起来  后期可以拿到
const originPush = VueRouter.prototype.push;
const originReplace = VueRouter.prototype.replace;
VueRouter.prototype.push = function (location, onResolve, onRejected) {
  // location 就是我们调用this.$router.push  传递过来的对象.
  if (onResolve === undefined && onRejected == undefined) {
    // 这里必须用call  这里的call  代表的就是调用这个方法的this.$router
    return originPush.call(this, location).catch(() => {});
  } else {
    // 调用时传递了成功或失败的回调
    return originPush.call(this, location, onResolve, onRejected);
  }
};
VueRouter.prototype.replace = function (location, onResolve, onRejected) {
  // location 就是我们调用this.$router.originReplace  传递过来的对象.
  if (onResolve === undefined && onRejected == undefined) {
    // 这里必须用call  这里的call  代表的就是调用这个方法的this.$router
    return originReplace.call(this, location).catch(() => {});
  } else {
    // 调用时传递了成功或失败的回调
    return originReplace.call(this, location, onResolve, onRejected);
  }
};

export default new VueRouter({
  routes: [
    {
      path: '/home',
      component: Home,
    },
    {
      path: '/login',
      component: Login,
      // meta 项是路由中的元配置项,可以配置所需的任何数据
      meta: {
        isHidden: true,
      },
    },
    {
      path: '/search/:keyword?',
      component: Search,
      name: 'search', //命名路由
    },
    {
      path: '/register',
      component: Register,
      meta: {
        isHidden: true,
      },
    },
    {
      path: '/',
      redirect: '/home', //重定向路由
    },
  ],
});
